package com.wwu.system.entity.server;

import cn.hutool.core.util.NumberUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;

/**
 * 服务器-虚拟机内存信息实体类
 * @author 一蓑烟雨
 * @version 1.0.0
 * @date 2022-05-17 21:28
 **/
@Data
@Accessors(chain = true)
@ApiModel(value="Mem:服务器-虚拟机内存信息实体", description="服务器-虚拟机内存信息实体")
public class Mem implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "内存总大小(G)")
    private double total;

    @ApiModelProperty(value = "内存已用大小(G)")
    private double usedTotal;

    @ApiModelProperty(value = "内存空闲大小(G)")
    private double idleTotal;

    @ApiModelProperty(value = "内存使用率(%)")
    private double usedRate;

    @ApiModelProperty(value = "JVM内存总大小(G)")
    private double jvmTotal;

    @ApiModelProperty(value = "JVM内存已用大小(G)")
    private double jvmUsedTotal;

    @ApiModelProperty(value = "JVM内存空闲大小(G)")
    private double jvmIdleTotal;

    @ApiModelProperty(value = "JVM内存使用率(%)")
    private double jvmUsedRate;


    /** 自定义内存总大小(G)get方法 */
    public double getTotal() {
        return NumberUtil.round(NumberUtil.div(total,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义内存已用大小(G)get方法 */
    public double getUsedTotal() {
        return NumberUtil.round(NumberUtil.div(usedTotal,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义内存空闲大小(G)get方法 */
    public double getIdleTotal() {
        return NumberUtil.round(NumberUtil.div(idleTotal,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义内存使用率get方法 */
    public double getUsedRate() {
        return NumberUtil.round(NumberUtil.mul(usedTotal/total,100),2).doubleValue();
    }

    /** 自定义JVM内存总大小(G)get方法 */
    public double getJvmTotal() {
        return NumberUtil.round(NumberUtil.div(jvmTotal,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义JVM内存已用大小(G)get方法 */
    public double getJvmUsedTotal() {
        return NumberUtil.round(NumberUtil.div(jvmUsedTotal,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义JVM内存空闲大小(G)get方法 */
    public double getJvmIdleTotal() {
        return NumberUtil.round(NumberUtil.div(jvmIdleTotal,(1024*1024*1024)),2).doubleValue();
    }

    /** 自定义JVM内存使用率get方法 */
    public double getJvmUsedRate() {
        return NumberUtil.round(NumberUtil.mul(jvmUsedTotal/jvmTotal,100),2).doubleValue();
    }
}
